home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CICA 1993 April
/
CICA MS Windows - April 1993.iso
/
unzipped
/
programr
/
cdbw
/
slistbox.c
< prev
next >
Wrap
Text File
|
1991-05-16
|
10KB
|
314 lines
/*
* SLISTBOX.C
*
* This module contains listbox functions for SAMPLE.EXE.
*
* Copyright (C) 1991 by Daytris. All rights reserved.
*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef ZORTECH
#include <memory.h>
#endif
#include "dbmgr.h"
#include "sampledb.h"
#include "sample.h"
/************************************************
* Local Data
************************************************/
/************************************************
* Function Declarations
************************************************/
BOOL LoadClientListBox( HWND hWnd);
BOOL AddToClientListBox( HWND hWnd, CLIENT *pClient);
BOOL DeleteFromClientListBox( HWND hWnd, short nIndex);
BOOL LoadAddressListBox( HWND hWnd);
BOOL AddToAddressListBox( HWND hWnd, ADDRESS FAR *lpAddress);
BOOL DeleteFromAddressListBox( HWND hWnd, short nIndex);
HANDLE GetAddressHandle( HWND hWnd, short nIndex);
/***************************************************************************
* Function : LoadClientListBox
*
* Purpose : This function retrieves all client records from the
* database and adds them to the client listbox.
*
* Returns : TRUE - load ok
* FALSE - load not ok
***************************************************************************/
BOOL LoadClientListBox( HWND hWnd)
{
BOOL bFirstTime = TRUE;
DWORD dwStatus;
char szSortField[32];
CLIENT client;
/* Reinitialize the listbox */
SendMessage( hWndClientLB, LB_RESETCONTENT, 0, 0L);
/* Set key field string for search */
if( bSortByNumber)
strcpy( szSortField, "lClientNbr");
else
strcpy( szSortField, "szName");
while( 1)
{
/* Get the client record */
if( bFirstTime)
{
bFirstTime = FALSE;
dwStatus = XDbRecordGetFirst( hDb, "client", szSortField,
&client, sizeof( CLIENT));
}
else
{
dwStatus = XDbRecordGetNext( hDb, "client", szSortField,
&client, sizeof( CLIENT));
}
/* Check for errors */
if( dwStatus == E_NOTFOUND || dwStatus == E_NONEXT)
break;
if( dwStatus)
{
DbError( hWnd, dwStatus, __FILE__, __LINE__);
return FALSE;
}
/* Add client to list box */
if( ! AddToClientListBox( hWnd, &client))
return FALSE;
}
return TRUE;
}
/***************************************************************************
* Function : AddToClientListBox
*
* Purpose : This function adds a client record to the listbox.
*
* Returns : TRUE - add ok
* FALSE - add not ok
***************************************************************************/
BOOL AddToClientListBox( HWND hWnd, CLIENT *pClient)
{
char szBuffer[64];
if( bSortByNumber)
sprintf( szBuffer, "%ld %s", pClient->lClientNbr,
pClient->szName);
else
sprintf( szBuffer, "%-30.30s %ld", pClient->szName,
pClient->lClientNbr);
if( SendMessage( hWndClientLB, LB_ADDSTRING, NULL,
(LONG)(LPSTR)szBuffer) == LB_ERR)
{
MessageBox( hWnd, "Error SendMessage / LB_ADDSTRING", "Fatal Error",
MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
return TRUE;
}
/***************************************************************************
* Function : DeleteFromClientListBox
*
* Purpose : This function deletes a string from the client listbox.
*
* Returns : TRUE - delete ok
* FALSE - delete not ok
***************************************************************************/
BOOL DeleteFromClientListBox( HWND hWnd, short nIndex)
{
if( SendMessage( hWndClientLB, LB_DELETESTRING, nIndex, 0L) == LB_ERR)
{
return FALSE;
}
return TRUE;
}
/***************************************************************************
* Function : LoadAddressListBox
*
* Purpose : This function retrieves all member address records of
* a selected client and adds them to the address listbox.
* The address listbox contains a tab field that is not
* in a visible area of the listbox. The handle to the
* address record is stored in this field in ASCII.
*
* Returns : TRUE - load ok
* FALSE - load not ok
***************************************************************************/
BOOL LoadAddressListBox( HWND hWnd)
{
BOOL bFirstTime = TRUE;
HANDLE hAddress;
DWORD dwStatus;
ADDRESS FAR *lpAddress;
/* Reinitialize the listbox */
SendMessage( GetDlgItem( hWnd, IDC_ADDR_LISTBOX), LB_RESETCONTENT, 0, 0L);
while( 1)
{
/* Allocate space for the address record */
if( ! (hAddress = GlobalAlloc( GMEM_MOVEABLE | GMEM_DDESHARE,
(DWORD)sizeof( ADDRESS))) )
{
MessageBox( hWnd, "Out of memory", "Fatal Error",
MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
/* Get the first or next set connection. Owner=client,
Member=address. */
if( bFirstTime)
{
bFirstTime = FALSE;
dwStatus = DbSetGetFirst( hDb, "client", "address", hAddress);
}
else
dwStatus = DbSetGetNext( hDb, "client", "address", hAddress);
/* Check for errors */
if( dwStatus == E_NOTFOUND || dwStatus == E_NONEXT)
{
/* All members retrieved, break */
GlobalFree( hAddress);
break;
}
if( dwStatus)
{
DbError( hWnd, dwStatus, __FILE__, __LINE__);
return FALSE;
}
/* Lock the address and add it to the listbox */
if( ! (lpAddress = (ADDRESS FAR *)GlobalLock( hAddress)) )
{
MessageBox( hWnd, "Memory: GlobalLock", "Fatal Error",
MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
if( ! AddToAddressListBox( hWnd, lpAddress))
{
GlobalUnlock( hAddress);
return FALSE;
}
GlobalUnlock( hAddress);
}
return TRUE;
}
/***************************************************************************
* Function : AddToAddressListBox
*
* Purpose : This function adds an address to the address listbox.
*
* Returns : TRUE - add ok
* FALSE - add not ok
***************************************************************************/
BOOL AddToAddressListBox( HWND hWnd, ADDRESS FAR *lpAddress)
{
HANDLE hAddress;
LPSTR lpMem;
char szBuffer[64];
/* Allocate memory and store Address record */
if( ! (hAddress = GlobalAlloc( GMEM_MOVEABLE, (DWORD)sizeof( ADDRESS))) )
{
MessageBox( hWnd, "Out of memory", "Fatal Error",
MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
if( (lpMem = GlobalLock( hAddress)) == NULL)
{
MessageBox( hWnd, "Memory: GlobalLock", "Fatal Error",
MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}
_fmemcpy( lpMem, lpAddress, sizeof( ADDRESS));
GlobalUnlock( hAddress);
/* Add the Address to the listbox. Also store the handle to the ADDRESS
structure. It will not be visible in the listbox. */
wsprintf( szBuffer, "%s\t%u", (LPSTR)lpAddress->szStreet, hAddress);
if( SendMessage( GetDlgItem( hWnd, IDC_ADDR_LISTBOX), LB_ADDSTRING,
NULL, (LONG)(LPSTR)szBuffer) == LB_ERR)
{
MessageBox( hWnd, "Error SendMessage / LB_ADDSTRING", "Fatal Error",
MB_ICONEXCLAMATION | MB_OK);
}
return TRUE;
}
/***************************************************************************
* Function : DeleteFromAddressListBox
*
* Purpose : This function deletes an address from the address listbox.
*
* Returns : TRUE - delete ok
* FALSE - delete not ok
***************************************************************************/
BOOL DeleteFromAddressListBox( HWND hWnd, short nIndex)
{
/* Get the handle to the address structure and free it */
if( GlobalFree( GetAddressHandle( hWnd, nIndex)) )
{
return FALSE;
}
/* Delete the listbox entry */
if( SendMessage( GetDlgItem( hWnd, IDC_ADDR_LISTBOX), LB_DELETESTRING,
nIndex, 0L) == LB_ERR)
{
return FALSE;
}
return TRUE;
}
/***************************************************************************
* Function : GetAddressHandle
*
* Purpose : This function retrieves the handle to an address record
* of a selected string in the address listbox.
*
* Returns : >0 - handle to address record
* NULL - error
***************************************************************************/
HANDLE GetAddressHandle( HWND hWnd, short nIndex)
{
char szBuffer[64];
/* Get the handle to the address structure and free it */
if( SendMessage( GetDlgItem( hWnd, IDC_ADDR_LISTBOX), LB_GETTEXT,
nIndex, (LONG)(LPSTR)szBuffer) == LB_ERR)
{
MessageBox( hWnd, "Error SendMessage / LB_GETTEXT", "Fatal Error",
MB_ICONEXCLAMATION | MB_OK);
return NULL;
}
return( atoi( strchr( szBuffer, '\t')));
}